using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._CartographicRefinement
{
    /// <summary>
    /// <para>Apply Building Offsets</para>
    /// <para>Aligns, moves, and hides building or bridge marker symbols based on product specification rules defined in an .xml file.</para>
    /// <para>根据 .xml 文件中定义的产品规范规则对齐、移动和隐藏建筑物或桥梁标记符号。</para>
    /// </summary>    
    [DisplayName("Apply Building Offsets")]
    public class ApplyBuildingOffsets : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ApplyBuildingOffsets()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_map">
        /// <para>Input Map</para>
        /// <para>The input map that contains the layers with proper symbology. This can be a map in the application or an .mapx file on disk.</para>
        /// <para>包含具有适当符号系统的图层的输入地图。这可以是应用程序中的映射，也可以是磁盘上的 .mapx 文件。</para>
        /// </param>
        /// <param name="_rule_file">
        /// <para>Rule File</para>
        /// <para>An .xml file containing the offset rules that define how features will be aligned and refined in case of any conflict.</para>
        /// <para>包含偏移规则的.xml文件，用于定义在发生任何冲突时如何对齐和优化要素。</para>
        /// </param>
        public ApplyBuildingOffsets(object _in_map, object _rule_file)
        {
            this._in_map = _in_map;
            this._rule_file = _rule_file;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Apply Building Offsets";

        public override string CallName => "topographic.ApplyBuildingOffsets";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_map, _rule_file, _updated_map];

        /// <summary>
        /// <para>Input Map</para>
        /// <para>The input map that contains the layers with proper symbology. This can be a map in the application or an .mapx file on disk.</para>
        /// <para>包含具有适当符号系统的图层的输入地图。这可以是应用程序中的映射，也可以是磁盘上的 .mapx 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Map")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_map { get; set; }


        /// <summary>
        /// <para>Rule File</para>
        /// <para>An .xml file containing the offset rules that define how features will be aligned and refined in case of any conflict.</para>
        /// <para>包含偏移规则的.xml文件，用于定义在发生任何冲突时如何对齐和优化要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Rule File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _rule_file { get; set; }


        /// <summary>
        /// <para>Updated Map</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Map")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_map { get; set; }


        public ApplyBuildingOffsets SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}